package api

import (
	"github.com/LyricTian/gin-admin/v7/internal/app/ginx"
	"github.com/LyricTian/gin-admin/v7/internal/app/schema"
	"github.com/LyricTian/gin-admin/v7/internal/app/service"
	"github.com/LyricTian/gin-admin/v7/pkg/util"
	"github.com/gin-gonic/gin"
	"github.com/google/wire"
	"strings"
)

// UserSet 注入User
var UserSet = wire.NewSet(wire.Struct(new(User), "*"))

// User 用户管理
type User struct {
	UserService *service.User
}

// Query 查询数据
func (a *User) Query(c *gin.Context) {
	ctx := c.Request.Context()
	var params schema.UserQueryParam
	if err := ginx.ParseQuery(c, &params); err != nil {
		ginx.ResError(c, err)
		return
	}
	if v := c.Query("roleIDs"); v != "" {
		roleIDs, err := util.StringListToInt64List(strings.Split(v, ","))
		if err != nil {
			ginx.ResError(c, err)
		}
		params.RoleIDs = roleIDs
	}

	params.Pagination = true
	result, err := a.UserService.QueryShow(ctx, params)
	if err != nil {
		ginx.ResError(c, err)
		return
	}
	ginx.ResPage(c, result.Data, result.PageResult)
}

// Get 查询指定数据
func (a *User) Get(c *gin.Context) {
	ctx := c.Request.Context()
	item, err := a.UserService.Get(ctx, c.GetInt64("id"))
	if err != nil {
		ginx.ResError(c, err)
		return
	}
	ginx.ResSuccess(c, item.CleanSecure())
}

// Create 创建数据
//func (a *User) Create(c *gin.Context) {
//	ctx := c.Request.Context()
//	var item schema.User
//	if err := ginx.ParseJSON(c, &item); err != nil {
//		ginx.ResError(c, err)
//		return
//	} else if item.Password == "" {
//		ginx.ResError(c, errors.New400Response("密码不能为空"))
//		return
//	}
//
//	item.Creator = ginx.GetUserID(c)
//	result, err := a.UserService.Create(ctx, item)
//	if err != nil {
//		ginx.ResError(c, err)
//		return
//	}
//	ginx.ResSuccess(c, result)
//}

// Update 更新数据
//func (a *User) Update(c *gin.Context) {
//	ctx := c.Request.Context()
//	var item schema.User
//	if err := ginx.ParseJSON(c, &item); err != nil {
//		ginx.ResError(c, err)
//		return
//	}
//
//	err := a.UserService.Update(ctx, c.Param("id"), item)
//	if err != nil {
//		ginx.ResError(c, err)
//		return
//	}
//	ginx.ResOK(c)
//}

// Delete 删除数据
func (a *User) Delete(c *gin.Context) {
	ctx := c.Request.Context()
	err := a.UserService.Delete(ctx, c.GetInt64("id"))
	if err != nil {
		ginx.ResError(c, err)
		return
	}
	ginx.ResOK(c)
}

// Enable 启用数据
func (a *User) Enable(c *gin.Context) {
	ctx := c.Request.Context()
	err := a.UserService.UpdateStatus(ctx, c.GetInt64("id"), 1)
	if err != nil {
		ginx.ResError(c, err)
		return
	}
	ginx.ResOK(c)
}

// Disable 禁用数据
func (a *User) Disable(c *gin.Context) {
	ctx := c.Request.Context()
	err := a.UserService.UpdateStatus(ctx, c.GetInt64("id"), 2)
	if err != nil {
		ginx.ResError(c, err)
		return
	}
	ginx.ResOK(c)
}
